% this function looks for occurrences of the endogenous variables in
% endo_names in the input string constraint
% all occurrences of the endogenous variables are appended a suffix
% if the invert_switch is true, the direction of the inequality in the
% constraint is inverted

function constraint1 = process_constraint(constraint,suffix,endo_names,invert_switch)

% create a list of delimiters that can separate parameters and endogenoous
% variables in the string that expresses the constraint
delimiters = char(',',';','(',')','+','-','^','*','/',' ','>','<','=');

% split the string that holds the constraint into tokens
tokens = tokenize(constraint,delimiters);

ntokens = length(tokens);

% search for tokens that match the list of endogenous variables
for i=1:ntokens
    if ~isempty(find(strcmp(tokens(i),endo_names)))
        % when there is a match with an endogenous variable append the
        % suffix
        tokens(i) = cellstr([char(tokens(i)),suffix]);
    end
    
    % if the invert_switch is true
    % reverse the direction of the inequality
    if invert_switch
        if  strcmp(tokens(i),cellstr('>'))
            tokens(i) = cellstr('<');
        elseif strcmp(tokens(i),cellstr('<'))
            tokens(i) = cellstr('>');
        end
    end
end

% reassemble the tokens to create a string that expresses the constraint
constraint1 = strmerge(tokens);